/**
 * 生成全局唯一标识符 guid
 * @param {boolean} line 是否带横线
 * @param {string} head 自定义标识
 * @returns
 */
export function guid(line = false, head = '') {
  const _ = line ? '-' : ''
  const S = () => (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
  return `${head}${S()}${S()}${_}${S()}${_}${S()}${_}${S()}${_}${S()}${S()}${S()}`
}
/**
 * 生成全局唯一标识符 nanoid
 * @param {number} size 生成位数
 * @returns
 */
export function nanoid(size = 21) {
  let id = ''
  let bytes = crypto.getRandomValues(new Uint8Array(size))
  while (size--) {
    let byte = bytes[size] & 63
    if (byte < 36) {
      id += byte.toString(36)
    } else if (byte < 62) {
      id += (byte - 26).toString(36).toUpperCase()
    } else if (byte < 63) {
      id += '_'
    } else {
      id += '-'
    }
  }
  return id
}
/**
 * 非常简易的hash运算
 * @param {string} str 文本
 */
export function textHax(str) {
  str = String(str)
  for (var i = 0, num = 0, len = str.length; i < len; i++) {
    num += str.charCodeAt(i) / (i + 1.3)
  }
  return (String(num).replace('.', '') - 0).toString(36)
}
/**简单的guid */
export function miniGuid() {
  return Math.random().toString(36).replace('0.', '')
}
